/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package uy.edu.ort.as.cliente.igu;

import java.io.IOException;
import uy.edu.ort.as.cliente.negocio.PaginaWeb;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableModel;
import org.jdom2.JDOMException;
import uy.edu.ort.as.cliente.servicios.GestionContenidoWS;
import uy.edu.ort.as.cliente.servicios.GestionContenidoWS_Service;
import uy.edu.ort.as.cliente.servicios.ResultadoPaginasWeb;
import uy.edu.ort.as.cliente.servicios.consultas.ConsultasContenidoWS;
import uy.edu.ort.as.cliente.servicios.consultas.ConsultasContenidoWS_Service;
import uy.edu.ort.as.cliente.util.UtilXML;

/**
 *
 * @author victor
 */
public class JFramePaginasWeb extends javax.swing.JFrame {

    SimpleDateFormat formatoFecha = new SimpleDateFormat("yyyy/MM/dd");

    /**
     * Creates new form JFramePaginasWeb
     */
    public JFramePaginasWeb() {
        initComponents();
        agregarDatos();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        lblTitulo = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        tblPaginasWeb = new javax.swing.JTable();
        btnAgregar = new javax.swing.JButton();
        btnEditar = new javax.swing.JButton();
        btnEliminar = new javax.swing.JButton();
        btnActualizar = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        lblTitulo.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        lblTitulo.setText("Páginas Web");

        tblPaginasWeb.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Título", "Fecha", "Contenido"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class, java.lang.String.class, java.lang.String.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tblPaginasWeb.setColumnSelectionAllowed(true);
        jScrollPane1.setViewportView(tblPaginasWeb);
        tblPaginasWeb.getColumnModel().getSelectionModel().setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);

        btnAgregar.setLabel("Agregar");
        btnAgregar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAgregarActionPerformed(evt);
            }
        });

        btnEditar.setLabel("Editar");
        btnEditar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEditarActionPerformed(evt);
            }
        });

        btnEliminar.setLabel("Eliminar");
        btnEliminar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEliminarActionPerformed(evt);
            }
        });

        btnActualizar.setText("Actualizar");
        btnActualizar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnActualizarActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 484, Short.MAX_VALUE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(195, 195, 195)
                        .addComponent(lblTitulo)
                        .addGap(0, 0, Short.MAX_VALUE))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(btnActualizar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(btnAgregar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btnEditar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(btnEliminar)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(22, 22, 22)
                .addComponent(lblTitulo)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 310, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnAgregar)
                    .addComponent(btnEditar)
                    .addComponent(btnEliminar)
                    .addComponent(btnActualizar))
                .addContainerGap())
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void btnAgregarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAgregarActionPerformed
        JFrameAgregarPaginasWeb jfapw = new JFrameAgregarPaginasWeb(this);
        jfapw.setVisible(true);
    }//GEN-LAST:event_btnAgregarActionPerformed

    private void btnEditarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEditarActionPerformed
        int indice = tblPaginasWeb.getSelectedRow();
        if (indice == -1) {
            JOptionPane.showMessageDialog(this, "Seleccione un elemento");
        } else {
            try {
                PaginaWeb pagina = getPaginaWeb(indice);

                JFrameEditarPaginaWeb jfepw = new JFrameEditarPaginaWeb(this, indice, pagina);
                jfepw.setVisible(true);
            } catch (ParseException ex) {
                JOptionPane.showMessageDialog(this, "El valor ingresado para la fecha no es correcto");
            }
        }
    }//GEN-LAST:event_btnEditarActionPerformed

    private void btnEliminarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEliminarActionPerformed
        try {
            eliminar(tblPaginasWeb);
        } catch (ParseException ex) {
            JOptionPane.showMessageDialog(this, "El valor de la fecha del elemento no es correcto");
        }
    }//GEN-LAST:event_btnEliminarActionPerformed

    private void btnActualizarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnActualizarActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_btnActualizarActionPerformed
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnActualizar;
    private javax.swing.JButton btnAgregar;
    private javax.swing.JButton btnEditar;
    private javax.swing.JButton btnEliminar;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JLabel lblTitulo;
    private javax.swing.JTable tblPaginasWeb;
    // End of variables declaration//GEN-END:variables

    private void eliminar(JTable tabla) throws ParseException {
        int indice = tabla.getSelectedRow();
        if (indice == -1) {
            JOptionPane.showMessageDialog(this, "Seleccione un elemento");
        } else {
            int res = JOptionPane.showConfirmDialog(this, "¿Esta seguro que quiere eliminar la página web?", "¡Atención!", JOptionPane.OK_CANCEL_OPTION);
            if (res == JOptionPane.OK_OPTION) {
                try {
                    PaginaWeb pagina = getPaginaWeb(indice);

                    GestionContenidoWS_Service ws = new GestionContenidoWS_Service();
                    GestionContenidoWS port = ws.getGestionContenidoWSPort();

                    String strRespuesta = port.removerPaginaWeb(UtilXML.parsePaginaWeb(pagina));

                    ResultadoPaginasWeb respuesta = UtilXML.parseResultadoPaginaWeb(strRespuesta);

                    if (respuesta.getResultadoCorrecto()) {
                        eliminar(tblPaginasWeb);

                        ((DefaultTableModel) tblPaginasWeb.getModel()).removeRow(indice);
                        int filas = ((DefaultTableModel) tblPaginasWeb.getModel()).getRowCount();

                        if (filas > 0) {
                            if (indice < filas) {
                                seleccionarFila(tabla, indice);
                            } else {
                                seleccionarFila(tabla, filas - 1);
                            }
                        }
                    } else {
                        JOptionPane.showMessageDialog(this, respuesta.getDescripcion());
                    }
                } catch (Exception exc) {
                    JOptionPane.showMessageDialog(this, exc.getMessage());
                }
            }
        }
    }

    PaginaWeb getPaginaWeb(int indice) throws ParseException {
        PaginaWeb pagina = new PaginaWeb();
        pagina.setTitulo(tblPaginasWeb.getValueAt(indice, 0).toString());
        pagina.setFecha(formatoFecha.parse(tblPaginasWeb.getValueAt(indice, 1).toString()));
        pagina.setContenido(tblPaginasWeb.getValueAt(indice, 2).toString());
        return pagina;
    }

    void seleccionarFila(JTable tabla, int fila) {
        ListSelectionModel selectionModel = tabla.getSelectionModel();
        selectionModel.setSelectionInterval(fila, fila);
    }

    void agregarPaginaWeb(PaginaWeb pagina) {
        DefaultTableModel modelo = (DefaultTableModel) tblPaginasWeb.getModel();
        Object[] row = new Object[]{pagina.getTitulo(), formatoFecha.format(pagina.getFecha()), pagina.getContenido()};
        modelo.addRow(row);
    }

    void editarPaginaWeb(int indice, PaginaWeb pagina) {
        DefaultTableModel modelo = (DefaultTableModel) tblPaginasWeb.getModel();
        modelo.setValueAt(pagina.getTitulo(), indice, 0);
        modelo.setValueAt(formatoFecha.format(pagina.getFecha()), indice, 1);
        modelo.setValueAt(pagina.getContenido(), indice, 2);
    }

    private void agregarDatos() {
        //        try {
        //            PaginaWeb pagina = new PaginaWeb("Las 10 mejores películas del 2011", formatoFecha.parse("2011/12/31"), "<Title>Las 10 mejores películas del 2011</Title><Body></Body>");
        //            agregarPaginaWeb(pagina);
        //            pagina = new PaginaWeb("Suben las acciones de Facebook", formatoFecha.parse("2012/03/01"), "<Title>Suben las acciones de Facebook</Title><Body></Body>");
        //            agregarPaginaWeb(pagina);
        //            pagina = new PaginaWeb("Blog de biología", formatoFecha.parse("2010/10/09"), "<Title>Blog de biología</Title><Body></Body>");
        //            agregarPaginaWeb(pagina);
        //        } catch (ParseException ex) {
        //            JOptionPane.showMessageDialog(this, ex.getMessage());
        //        }
        try {
            ConsultasContenidoWS_Service ws = new ConsultasContenidoWS_Service();
            ConsultasContenidoWS port = ws.getConsultasContenidoWSPort();

            String strRespuesta = port.obtenerTodasPaginasWeb();

            ResultadoPaginasWeb respuesta = UtilXML.parseResultadoPaginaWeb(strRespuesta);

            if (respuesta.getResultadoCorrecto()) {
                for(PaginaWeb pagina : respuesta.getResultado()) {
                    agregarPaginaWeb(pagina);
                }
            } else {
                JOptionPane.showMessageDialog(this, respuesta.getDescripcion());
            }
        } catch (Exception ex) {
            JOptionPane.showMessageDialog(this, ex.getMessage());
        }
    }
}
